package main

/**
* @Author: DengLibin
* @Date: Create in 2023-01-10 16:21:45
* @Description:给你两个单链表的头节点 headA 和 headB ，请你找出并返回两个
单链表相交的起始节点。如果两个链表不存在相交节点，返回 null 。
*/

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-10 16:22:16
 * @Description: 相交节点 思路 相交后 后面的节点一样 先消除相交前的长度差
 */
func getIntersectionNode(headA, headB *ListNode) *ListNode {
	lenA := listLen(headA)
	lenB := listLen(headB)
	tempNodeA := headA
	tempNodeB := headB

	if lenA > lenB {
		for i := 0; i < lenA-lenB; i++ {
			tempNodeA = tempNodeA.Next
		}
	}
	if lenB > lenA {
		for i := 0; i < lenB-lenA; i++ {
			tempNodeB = tempNodeB.Next
		}
	}

	for tempNodeA != nil && tempNodeB != nil {
		if tempNodeA == tempNodeB {
			return tempNodeA
		}
		tempNodeA = tempNodeA.Next
		tempNodeB = tempNodeB.Next
	}
	return nil

}

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-10 16:36:11
 * @Description: 链表长度
 */
func listLen(head *ListNode) int {
	len := 0
	tempNode := head
	for tempNode != nil {
		len += 1
		tempNode = tempNode.Next
	}
	return len
}
